{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install --user graphviz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Lab 12 - Decision Trees\n", "\n", "For this lab, we will use survey data collected by the city of [Somerville, MA](https://en.wikipedia.org/wiki/Somerville,_Massachusetts) asking residents about their happiness, as well as ratings of city services. \n", "\n", "The data is available from the UC Irvine Machine Learning Repository: [https://archive.ics.uci.edu/ml/datasets/Somerville+Happiness+Survey](https://archive.ics.uci.edu/ml/datasets/Somerville+Happiness+Survey)\n", "\n", "The link to download the data is [https://archive.ics.uci.edu/ml/machine-learning-databases/00479/SomervilleHappinessSurvey2015.csv](https://archive.ics.uci.edu/ml/machine-learning-databases/00479/SomervilleHappinessSurvey2015.csv)\n", "\n", "The data columns are:\n", "\n", "- D = decision attribute (D) with values 0 (unhappy) and 1 (happy) \n", "- X1 = the availability of information about the city services \n", "- X2 = the cost of housing \n", "- X3 = the overall quality of public schools \n", "- X4 = your trust in the local police \n", "- X5 = the maintenance of streets and sidewalks \n", "- X6 = the availability of social community events \n", "\n", "Attributes X1 to X6 have values 1 to 5." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn import tree\n", "import graphviz\n", "from graphviz import Source\n", " \n", "from sklearn.tree import export_graphviz\n", "import sklearn.metrics as met\n", "from sklearn.metrics import confusion_matrix\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the data into a dataframe. We have given the columns more descriptive names." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | D | \n", "X1 | \n", "X2 | \n", "X3 | \n", "X4 | \n", "X5 | \n", "X6 | \n", "
---|---|---|---|---|---|---|---|
0 | \n", "0 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "2 | \n", "4 | \n", "
1 | \n", "0 | \n", "3 | \n", "2 | \n", "3 | \n", "5 | \n", "4 | \n", "3 | \n", "
2 | \n", "1 | \n", "5 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
3 | \n", "0 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
4 | \n", "0 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
5 | \n", "1 | \n", "5 | \n", "5 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "
6 | \n", "0 | \n", "3 | \n", "1 | \n", "2 | \n", "2 | \n", "1 | \n", "3 | \n", "
7 | \n", "1 | \n", "5 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
8 | \n", "0 | \n", "4 | \n", "1 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
9 | \n", "0 | \n", "4 | \n", "4 | \n", "4 | \n", "2 | \n", "5 | \n", "5 | \n", "
10 | \n", "0 | \n", "3 | \n", "2 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "
11 | \n", "0 | \n", "4 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
12 | \n", "1 | \n", "5 | \n", "2 | \n", "4 | \n", "5 | \n", "5 | \n", "5 | \n", "
13 | \n", "0 | \n", "4 | \n", "2 | \n", "4 | \n", "5 | \n", "4 | \n", "3 | \n", "
14 | \n", "0 | \n", "4 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "3 | \n", "
15 | \n", "1 | \n", "3 | \n", "2 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "
16 | \n", "0 | \n", "5 | \n", "3 | \n", "4 | \n", "5 | \n", "4 | \n", "5 | \n", "
17 | \n", "1 | \n", "5 | \n", "1 | \n", "4 | \n", "3 | \n", "4 | \n", "5 | \n", "
18 | \n", "0 | \n", "5 | \n", "1 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "
19 | \n", "0 | \n", "4 | \n", "2 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
20 | \n", "1 | \n", "4 | \n", "2 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "
21 | \n", "1 | \n", "4 | \n", "2 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "
22 | \n", "0 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "4 | \n", "
23 | \n", "0 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "4 | \n", "
24 | \n", "1 | \n", "5 | \n", "1 | \n", "2 | \n", "5 | \n", "2 | \n", "4 | \n", "
25 | \n", "1 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "
26 | \n", "0 | \n", "3 | \n", "4 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "
27 | \n", "1 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "
28 | \n", "1 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "
29 | \n", "1 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
113 | \n", "1 | \n", "5 | \n", "3 | \n", "4 | \n", "3 | \n", "4 | \n", "3 | \n", "
114 | \n", "0 | \n", "5 | \n", "2 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
115 | \n", "1 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "3 | \n", "4 | \n", "
116 | \n", "0 | \n", "3 | \n", "2 | \n", "2 | \n", "3 | \n", "3 | \n", "3 | \n", "
117 | \n", "0 | \n", "4 | \n", "1 | \n", "3 | \n", "5 | \n", "3 | \n", "5 | \n", "
118 | \n", "1 | \n", "5 | \n", "1 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "
119 | \n", "0 | \n", "4 | \n", "1 | \n", "3 | \n", "2 | \n", "4 | \n", "4 | \n", "
120 | \n", "1 | \n", "5 | \n", "1 | \n", "5 | \n", "3 | \n", "5 | \n", "5 | \n", "
121 | \n", "0 | \n", "4 | \n", "2 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
122 | \n", "0 | \n", "5 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "5 | \n", "
123 | \n", "1 | \n", "5 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
124 | \n", "1 | \n", "5 | \n", "2 | \n", "4 | \n", "4 | \n", "2 | \n", "3 | \n", "
125 | \n", "0 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
126 | \n", "0 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
127 | \n", "0 | \n", "3 | \n", "2 | \n", "3 | \n", "3 | \n", "5 | \n", "4 | \n", "
128 | \n", "0 | \n", "4 | \n", "1 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "
129 | \n", "0 | \n", "5 | \n", "1 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
130 | \n", "0 | \n", "5 | \n", "2 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "
131 | \n", "0 | \n", "5 | \n", "3 | \n", "5 | \n", "4 | \n", "5 | \n", "5 | \n", "
132 | \n", "1 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "1 | \n", "3 | \n", "
133 | \n", "1 | \n", "5 | \n", "1 | \n", "5 | \n", "5 | \n", "5 | \n", "5 | \n", "
134 | \n", "1 | \n", "4 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
135 | \n", "1 | \n", "5 | \n", "5 | \n", "1 | \n", "1 | \n", "5 | \n", "1 | \n", "
136 | \n", "0 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "1 | \n", "3 | \n", "
137 | \n", "1 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "4 | \n", "3 | \n", "
138 | \n", "0 | \n", "5 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "5 | \n", "
139 | \n", "1 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "2 | \n", "5 | \n", "
140 | \n", "1 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
141 | \n", "0 | \n", "4 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
142 | \n", "0 | \n", "5 | \n", "3 | \n", "2 | \n", "5 | \n", "5 | \n", "5 | \n", "
143 rows × 7 columns
\n", "\n", " | happy | \n", "city_info | \n", "housing_cost | \n", "school_quality | \n", "trust_police | \n", "streets_sidewalks | \n", "community_events | \n", "
---|---|---|---|---|---|---|---|
0 | \n", "0 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "2 | \n", "4 | \n", "
1 | \n", "0 | \n", "3 | \n", "2 | \n", "3 | \n", "5 | \n", "4 | \n", "3 | \n", "
2 | \n", "1 | \n", "5 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
3 | \n", "0 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
4 | \n", "0 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
\n", " | city_info | \n", "housing_cost | \n", "school_quality | \n", "trust_police | \n", "streets_sidewalks | \n", "community_events | \n", "
---|---|---|---|---|---|---|
0 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "2 | \n", "4 | \n", "
1 | \n", "3 | \n", "2 | \n", "3 | \n", "5 | \n", "4 | \n", "3 | \n", "
2 | \n", "5 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
3 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
4 | \n", "5 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
5 | \n", "5 | \n", "5 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "
6 | \n", "3 | \n", "1 | \n", "2 | \n", "2 | \n", "1 | \n", "3 | \n", "
7 | \n", "5 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
8 | \n", "4 | \n", "1 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
9 | \n", "4 | \n", "4 | \n", "4 | \n", "2 | \n", "5 | \n", "5 | \n", "
10 | \n", "3 | \n", "2 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "
11 | \n", "4 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
12 | \n", "5 | \n", "2 | \n", "4 | \n", "5 | \n", "5 | \n", "5 | \n", "
13 | \n", "4 | \n", "2 | \n", "4 | \n", "5 | \n", "4 | \n", "3 | \n", "
14 | \n", "4 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "3 | \n", "
15 | \n", "3 | \n", "2 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "
16 | \n", "5 | \n", "3 | \n", "4 | \n", "5 | \n", "4 | \n", "5 | \n", "
17 | \n", "5 | \n", "1 | \n", "4 | \n", "3 | \n", "4 | \n", "5 | \n", "
18 | \n", "5 | \n", "1 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "
19 | \n", "4 | \n", "2 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
20 | \n", "4 | \n", "2 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "
21 | \n", "4 | \n", "2 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "
22 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "4 | \n", "
23 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "4 | \n", "
24 | \n", "5 | \n", "1 | \n", "2 | \n", "5 | \n", "2 | \n", "4 | \n", "
25 | \n", "4 | \n", "3 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "
26 | \n", "3 | \n", "4 | \n", "3 | \n", "3 | \n", "2 | \n", "3 | \n", "
27 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "5 | \n", "5 | \n", "
28 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "
29 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "3 | \n", "4 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
113 | \n", "5 | \n", "3 | \n", "4 | \n", "3 | \n", "4 | \n", "3 | \n", "
114 | \n", "5 | \n", "2 | \n", "3 | \n", "3 | \n", "3 | \n", "5 | \n", "
115 | \n", "4 | \n", "3 | \n", "4 | \n", "4 | \n", "3 | \n", "4 | \n", "
116 | \n", "3 | \n", "2 | \n", "2 | \n", "3 | \n", "3 | \n", "3 | \n", "
117 | \n", "4 | \n", "1 | \n", "3 | \n", "5 | \n", "3 | \n", "5 | \n", "
118 | \n", "5 | \n", "1 | \n", "4 | \n", "3 | \n", "5 | \n", "5 | \n", "
119 | \n", "4 | \n", "1 | \n", "3 | \n", "2 | \n", "4 | \n", "4 | \n", "
120 | \n", "5 | \n", "1 | \n", "5 | \n", "3 | \n", "5 | \n", "5 | \n", "
121 | \n", "4 | \n", "2 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
122 | \n", "5 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "5 | \n", "
123 | \n", "5 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "
124 | \n", "5 | \n", "2 | \n", "4 | \n", "4 | \n", "2 | \n", "3 | \n", "
125 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
126 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
127 | \n", "3 | \n", "2 | \n", "3 | \n", "3 | \n", "5 | \n", "4 | \n", "
128 | \n", "4 | \n", "1 | \n", "3 | \n", "3 | \n", "3 | \n", "4 | \n", "
129 | \n", "5 | \n", "1 | \n", "4 | \n", "4 | \n", "4 | \n", "5 | \n", "
130 | \n", "5 | \n", "2 | \n", "2 | \n", "4 | \n", "4 | \n", "5 | \n", "
131 | \n", "5 | \n", "3 | \n", "5 | \n", "4 | \n", "5 | \n", "5 | \n", "
132 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "1 | \n", "3 | \n", "
133 | \n", "5 | \n", "1 | \n", "5 | \n", "5 | \n", "5 | \n", "5 | \n", "
134 | \n", "4 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "4 | \n", "
135 | \n", "5 | \n", "5 | \n", "1 | \n", "1 | \n", "5 | \n", "1 | \n", "
136 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "1 | \n", "3 | \n", "
137 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "4 | \n", "3 | \n", "
138 | \n", "5 | \n", "3 | \n", "3 | \n", "1 | \n", "3 | \n", "5 | \n", "
139 | \n", "5 | \n", "2 | \n", "3 | \n", "4 | \n", "2 | \n", "5 | \n", "
140 | \n", "5 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
141 | \n", "4 | \n", "3 | \n", "3 | \n", "4 | \n", "4 | \n", "5 | \n", "
142 | \n", "5 | \n", "3 | \n", "2 | \n", "5 | \n", "5 | \n", "5 | \n", "
143 rows × 6 columns
\n", "